Skip to content

feat: 스탬프 기능 구현(#23)#29

Merged
hisonghy merged 1 commit intodevelopfrom
feat/23
Jul 15, 2025
Merged

feat: 스탬프 기능 구현(#23)#29
hisonghy merged 1 commit intodevelopfrom
feat/23

Conversation

@hisonghy
Copy link
Contributor

@hisonghy hisonghy commented Jul 14, 2025

📌 작업 내용 및 특이사항

✅ Stamp 관련 기능 구현

  1. 스탬프 생성 기능
  • 특정 여행에 단일 스탬프를 등록, 생성하는 기능 구현
  • 기존 스탬프 목록에 새로 추가된 스탬프를 포함해 하나의 리스트로 구성하고, 해당 리스트를 기반으로 순서를 검증하도록 구현
  • 코스형 여행일 경우, 성공적으로 생성되면 소속된 여행의 totalStamps 필드 값을 +1 처리하도록 구성
  • 검증 항목
[ 여행 유효성 검증 ]
- 존재하는 여행 ID인지
- 요청한 사용자가 여행의 소유자인지
- 삭제된 여행이 아닌지

[ 스탬프 마감일 검증 ]
- 마감일이 과거가 아닌지
- 여행 종료일 이후가 아닌지

[ 스탬프 순서 검증 ]
- 탐험형 여행에서 순서가 존재하는지 여부
- 코스형 여행의 순서 범위
- 코스형 여행의 중복 순서

  1. 스탬프 이름 또는 마감일 수정 기능
  • PATCH 방식으로 이름 또는 마감일 중 수정할 필드만 선택적으로 수정 가능하도록 구현
  • 검증 항목
[ 여행 유효성 검증 ]
- 존재하는 여행 ID인지
- 요청한 사용자가 여행의 소유자인지
- 삭제된 여행이 아닌지

[ 스탬프 유효성 검증 ]
- 존재하는 스탬프 ID인지
- 해당 스탬프가 요청한 여행에 속해 있는지
- 삭제된 스탬프인지

[ 스탬프 마감일 검증 ]
- 마감일이 과거가 아닌지
- 여행 종료일 이후가 아닌지

  1. 스탬프 순서 변경 기능
  • 클라이언트에서 최종적인 순서로 정렬된 스탬프 ID 리스트를 전달받아서 해당 순서대로 업데이트 하도록 구성
  • 검증 항목
[여행 유효성 검증]
- 존재하는 여행 ID인지
- 요청한 사용자가 여행의 소유자인지
- 삭제된 여행이 아닌지

[ 최종 순서로 정렬된 스탬프 ID 리스트 검증 ]
- 탐험형일 경우 순서 변경 불가능
- 코스형이지만 요청한 스탬프 ID 리스트와 실제 스탬프 목록의 개수가 다른 경우

[ 스탬프 유효성 검증 ]
- 해당 스탬프가 요청한 여행에 속해 있는지
- 삭제된 스탬프인지

  1. 스탬프 삭제 기능
  • 스탬프의 deletedAt 필드를 현재 시간으로 업데이트해서 soft delete 방식을 적용
  • ⭐ 당장은 StampdeletedAt 필드만 업데이트하도록 구성했는데, 삭제 로직은 더 구상을 해보고 추후 업데이트할 예정입니다
  • 만약 코스형 여행의 스탬프가 삭제될 경우, 여행의 스탬프 목록에서 삭제된 스탬프의 stampOrder보다 큰 순서를 가진 스탬프들을 조회해 -1씩 재정렬하도록 구성 -> StampQueryRepository.findStampsToShiftAfterOrder()
  • 해당 여행의 totalStamps 필드 값을 -1 감소 처리
  • 검증 항목
[ 여행 유효성 검증 ]
- 존재하는 여행 ID인지
- 요청한 사용자가 여행의 소유자인지
- 삭제된 여행이 아닌지

[ 스탬프 유효성 검증 ]
- 존재하는 스탬프 ID인지
- 해당 스탬프가 요청한 여행에 속해 있는지
- 삭제된 스탬프인지

  1. 스탬프 목록 조회 기능
  • 특정 여행의 모든 스탬프 목록을 조회하는 기능 구현
  • deletedAt IS NULL 조건으로 삭제되지 않은 스탬프만 조회되도록 구성

  1. 특정 스탬프 상세 조회 기능
  • 요청한 StampId로 해당 스탬프를 조회하고, 해당 스탬프에 속한 모든 미션 목록도 함께 조회되도록 구성
  • 검증 항목
[ 여행 유효성 검증 ]
- 존재하는 여행 ID인지
- 요청한 사용자가 여행의 소유자인지
- 삭제된 여행이 아닌지

[ 스탬프 유효성 검증 ]
- 존재하는 스탬프 ID인지
- 해당 스탬프가 요청한 여행에 속해 있는지
- 삭제된 스탬프인지

✅ Trip Service 로직 추가

  • TripService.getValidTrip() 메서드를 추가해, 여행 소유자 검증 및 삭제 검증을 수행하고 유효한 Trip을 조회할 수 있도록 구성
    : PR을 병합한 이후에 TripService 또는 Trip 정보를 사용하는 영역에 기존 getTrip() 메서드를 호출하는 부분을 getValidTrip() 메서드로 교체할 예정입니다
  • 스탬프를 생성하거나 삭제할 경우 해당 여행의 총 스탬프 개수를 변경하기 위해 TripServicetotalStamps 필드 값을 증가시키는 increaseTotalStamps() 와 감소시키는 decreaseTotalStamps() 메서드 추가

✅ Mission 관련 로직 추가

  • 스탬프 상세 조회 로직에서 해당 스탬프에 포함된 미션 목록도 함께 응답할 수 있도록 MissionService.getMissionsByStamp() 메서드 추가
  • mission.application.dto.MissionInfo 를 구성해 Mission 도메인 정보를 응답하도록 구성

✅ 테스트 추가

  • TripServiceTest에 총 스탬프 수 증가/감소 기능 단위 테스트 추가
  • 테스트용 Stamp를 생성하는 StampTestHelper 클래스 추가
  • StampFixture에 임의의 ID를 지정할 수 있는 createStampWithId() 메서드 추가
  • StampServiceTest 단위 테스트 구성
  • StampControllerIntegrationTest 통합 테스트 구성

🌱 관련 이슈


🔍 참고사항(선택)


📚 기타(선택)

  • 테스트 코드를 작성하는 범위에 대한 기준이 명확하지 않아서 혼란스러운 부분이 있어요. 어느 경우까지 테스트를 작성해야 하는지, 응답 값은 어디까지 검증할지 등을 정리하기 위해 한 번 회의를 진행하면 좋을 것 같아요.
  • 현재 저희 서비스의 삭제는 soft delete 방식으로 처리되고 있어서 하나의 엔티티를 삭제할 때 연관된 다른 엔티티들도 어떻게 함께 삭제 처리할지에 대해 조금 더 고민이 필요할 것 같아요. 우선은 주요 CRU(생성, 수정, 조회) 로직을 먼저 구현하고 이후에 삭제 로직을 구상해 완성해나가는 것이 좋을 것 같아요.

@hisonghy hisonghy requested a review from chaiminwoo0223 July 14, 2025 14:07
@hisonghy hisonghy self-assigned this Jul 14, 2025
@hisonghy hisonghy added the ✨feature 구현, 개선 사항 관련 부분 label Jul 14, 2025
Copy link
Contributor

@chaiminwoo0223 chaiminwoo0223 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생하셨습니다.

2가지 개선 가능한 부분이 보여 코드 리뷰 남겼습니다. 확인 부탁드려요.

Copy link
Contributor

@chaiminwoo0223 chaiminwoo0223 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

변경된 내용 모두 확인했습니다. 머지 부탁드려요!

* feat: 특정 여행의 스탬프 생성 기능 구현
* feat: 스탬프 이름 및 마감일 수정 기능 구현
* feat: 스탬프 순서 변경 기능 구현
* feat: 스탬프 삭제 기능 구현
* feat: 여행별 스탬프 목록 조회 기능 구현
* feat: 스탬프 조회 및 해당 스탬프의 미션 목록 조회 기능 구현
* feat: 스탬프 등록, 삭제에 따라 여행의 총 스탬프 수를 업데이트하는 로직 추가
* feat: 특정 스탬프의 미션 목록 조회 로직 추가
* feat: 검증된 Trip 정보를 조회하는 로직 추가

* test: TripServiceTest에 총 스탬프 수 증가, 감소 테스트 추가
* test: StampTestHelper 클래스 추가
* test: UpdateStampRequestFixture 클래스 추가
* test: StampFixture.createStampWithId 메서드 추가
* test: StampControllerIntegrationTest - 통합 테스트 추가
* test: StampServiceTest - 단위 테스트 추가
@hisonghy hisonghy merged commit 3bd8367 into develop Jul 15, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

✨feature 구현, 개선 사항 관련 부분

Projects

None yet

Development

Successfully merging this pull request may close these issues.

✨[FEAT]: 스탬프 관련 기능 구현

2 participants